using System;

public class Propriedade
{
	public string Nome;
	public virtual decimal Passivo { get { return 0; } }
}

public class Accoes : Propriedade
{
	public int NumeroAccoes;
}

public class Casa : Propriedade
{
	public decimal Hipoteca;
	public override decimal Passivo { get { return Hipoteca; }}
}

public class Teste
{
	public static void Main()
	{
		// upcasting
		Accoes ctt = new Accoes();
		Propriedade p = ctt;
		// downcasting
		Accoes a = (Accoes) p;
		if (p is Accoes)
			((Accoes) p).NumeroAccoes = 1000;
	}
}